AUTOSAR 入门教程(8)ComStack CANTP(三)

CAN 传输协议(CANTP) 是 AUTOSAR 中实现长报文多帧传输的关键模块,尤其在诊断通信(UDS/OBD)中不可或缺。本文将解析 CANTP 的分层架构、流控机制和诊断应用场景。

Pasted image 20251230110031.png

图:CANTP 在 AUTOSAR 通信栈中的位置(位于服务层)

CANTP 架构定位

核心功能

CANTP 的核心职责包括:

模块交互关系

模块 交互方向 作用
PDU Router 上层 接收/发送 N-PDU
CanIf 下层 访问 CAN 控制器硬件
DCM 同级 处理诊断请求/响应

核心工作机制

帧类型解析

帧类型 标识符 功能
单帧(SF) 0x0 传输 ≤7 字节数据
首帧(FF) 0x1 标记多帧传输开始
连续帧(CF) 0x2 传输后续数据块
流控帧(FC) 0x3 协调传输速率

示例:传输 20 字节诊断报文

  1. 发送方:FF(0x1)+ 长度 → 接收方
  2. 接收方:FC(0x3)+ BS/STmin 参数
  3. 发送方:CF(0x2)+ 数据块(循环直到完成)

流控参数详解

流控通过以下参数协调收发双方的节奏:

关键配置参数

静态配置项

/* CANTP 模块配置示例 */
CanTpChannelConfig {
  CanTpNsa = TRUE; // 使用网络层地址
  CanTpSTmin = 20; // 默认帧间隔(ms)
  CanTpBs = 8; // 块大小
  CanTpNar = 0x7DF; // 目标地址
}

动态参数限制

参数 范围 说明
BS 0-255 0 表示无流控限制
STmin 0-127ms 超过 127ms 需特殊编码
N_PDU 长度 ≤4095 字节 ISO-TP 标准限制

诊断通信实战

UDS 报文示例

# 读取故障码请求(0x1901 为 CAN ID)
[0x1901] 02 19 01 AA AA AA AA
# 响应报文(多帧传输)
[0x1901] 10 14 59 01 FF 00 00 # 首帧(总长度 20)
[0x1901] 21 01 02 03 04 05 06 # 连续帧 1
[0x1901] 22 07 08 09 0A 0B 0C # 连续帧 2

常见问题排查

建议使用 CANoe/CANalyzer 抓包分析帧序列时序。